Naamconflicten voorkomen

   

Een naamconflict treedt op als u probeert een aanduiding te maken of te gebruiken die al eerder is gedefinieerd. In sommige gevallen veroorzaken naamconflicten foutmeldingen zoals "Er is een dubbelzinnige naam gevonden" of "Dubbele declaratie in het huidige bereik". Naamconflicten die niet worden ontdekt, kunnen tot programmafouten in de programmacode leiden. Deze programmafouten kunnen onjuiste resultaten opleveren, vooral als u niet expliciet alle variabelen declareert voordat u deze voor het eerst gebruikt.

U kunt de meeste naamconflicten vermijden als u de bereikeigenschappen van aanduidingen voor gegevens, objecten en procedures begrijpt. Visual Basic kent drie niveaus van bereik: het procedureniveau, private (persoonlijke) moduleniveau en public (openbare) moduleniveau.

Een naamconflict kan optreden als een aanduiding:

Procedures in aparte modules kunnen bijvoorbeeld dezelfde naam hebben. U kunt daarom een procedure MySub in de modules Mod1 en Mod2 definiδren. Als iedere procedure alleen vanuit andere procedures in de eigen module wordt opgeroepen, treden geen conflicten op. Een fout kan zich echter voordoen als MySub vanuit een derde module wordt opgeroepen en de twee procedures MySub op geen enkele manier van elkaar te onderscheiden zijn.

U kunt de meeste naamconflicten oplossen door v≤≤r elke aanduiding een bepaling op te nemen die uit een modulenaam en eventueel een projectnaam bestaat. Bijvoorbeeld:

YourProject.YourModule.YourSub MyProject.MyModule.MyVar

De voorafgaande programmacode noemt de procedure Sub nu YourSub en behandelt MyVar als een argument. U kunt elke gewenste combinatie van bepalingen gebruiken om identieke aanduidingen verschillend te maken.

Visual Basic koppelt elke verwijzing aan de aanduiding die een structuur heeft die het ædichtstÆ bij de structuur van de verwijzing ligt. Als MyID bijvoorbeeld in twee modules in een project (Mod1 en Mod2) tweemaal als Public is gedefinieerd, kunt u binnen Mod2 zonder verdere bepalingen de aanduiding MyID opgeven die u in Mod2 hebt gedefinieerd. In Mod1 moet u deze echter beschrijven als Mod2.MyID. Dit geldt ook als Mod2 zich in een ander project bevindt waar direct naar wordt verwezen. Als Mod2 zich echter in een project bevindt waar indirect naar wordt verwezen (via het project waarnaar u direct verwijst), moeten alle verwijzingen MyID naar de variabele Mod2 van de projectnaam worden voorzien. Als u in een onafhankelijke module, waarnaar direct wordt verwezen, een verwijzing naar MyID opneemt, wordt de verwijzing gekoppeld aan de eerste declaratie die tijdens het zoeken wordt gevonden.

U kunt namen van objecten in brontoepassingen (bijvoorbeeld R1C1 in Microsoft Excel) niet hergebruiken op andere niveaus.

Tip Veel voorkomende fouten die door naamconflicten worden veroorzaakt zijn onder andere dubbelzinnige namen, dubbelzinnige declaraties, niet gedeclareerde aanduidingen en procedures die niet worden gevonden. Als u elke module begint met een instructie Option Explicit, zodat uw variabelen v≤≤r gebruik expliciet zijn gedeclareerd, kunt u een aantal potentiδle naamconflicten en programmafouten ten gevolge van verkeerde aanduidingen vermijden.